Instant messengers are an easy, fast way to communicate over the Internet. Basic instant messengers allow users to type messages to each other on separate computers and have those messages immediately show on the screen, like instant email. More advanced systems have features like audio and video communication. These days instant messengers are becoming more popular, given the way the Internet is helping people from all over the world connect with one another. This has led to an increased demand for quick and easy communication.

It's difficult to be original when developing an instant messenger. Programs like Skype, AIM, and Windows Live Messenger are popular, especially with the younger generation. There are many kinds of instant messengers out there, the most prominent of which are always competing against each other to have the newest and most intriguing features.

This project is not about joining that competition. Instead, we are using this opportunity to explore what it's like to create an instant messenger from the ground up. As we are part of the younger generation, we use instant messengers almost daily, and it's interesting to be able to go behind the scenes and discover how they work for ourselves.

The instant messenger model that we decided to use consists of a server, any number of clients, and a set of rules defining how the server and clients talk to each other, called a protocol. A user of the program is essentially interacting with a client, and the clients interact with each other through the server. That communication is structured using the protocol.

Instead of using the protocol and server of an existing instant messenger and focusing on the client, we decided to create the entire system ourselves. This way we're able to learn more about the whole process of creating such a program. We divided ourselves into two smaller groups: two of us to do the networking and make the server, and the other two to make the client, including the user interface, or UI.

This report is meant for the Computing Science professors at Glasgow University, fellow Computing Science students, and anyone with an interest in instant messaging or the process of completing a larger-scale Computing Science project.

The structure of this report is as follows. After the introduction in Chapter 1, we have the problem definition and an overview of the requirements in Chapter 2. Chapter 3 covers the design of the protocol, client, server, and overall networking. In Chapter 4 is a discussion of our implementation of the client and server. Chapter 5 covers evaluation of our finished product, and Chapter 6 is a conclusion and reflective of what we learned.
